perm filename DEBUG.SAI[ALF,DEK] blob sn#462922 filedate 1979-08-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "debug"
C00007 ENDMK
C⊗;
BEGIN "debug"

REQUIRE  "IOSAIL.HDR[SUB,SYS]"  SOURCE!FILE;

STRING PROCEDURE  SkipJunk( REFERENCE STRING line );
    BEGIN "Skip the junk"
    STRING  dummy;
    WHILE line and ( (line < "0") or ("9" < line < "A") or (line > "Z") )  DO
        dummy ← LOP( line );
    RETURN( line );
    END "Skip the junk";

INTEGER PROCEDURE  HexToDecimal( REFERENCE STRING bytes );
    BEGIN "Hex to Decimal"
    INTEGER  byte;
    byte ← LOP( bytes );
    IF  "A" ≤ byte ≤ "F"  THEN
        byte  ←  10 + byte-"A"
    ELSE
        byte  ←  byte-"0";
    RETURN( byte )
    END "Hex to Decimal";

INTEGER PROCEDURE  Decode( REFERENCE STRING bytes );
    BEGIN "2 hex to 3 decimal"
    SkipJunk( bytes );
    RETURN( HexToDecimal( bytes ) * 16 + HexToDecimal( bytes ) );
    END "2 hex to 3 decimal";

STRING PROCEDURE  HexDigit( INTEGER halfbyte );
    BEGIN "Hex digit"
    IF  halfbyte > 9  THEN
        RETURN( ("A"+halfbyte) & null )
    ELSE
        RETURN( ("0"+halfbyte) & null );
    END "Hex digit";

STRING PROCEDURE  HexByte( INTEGER byte );
    BEGIN "Hex byte"
    RETURN( HexDigit( byte DIV 16 ) & HexDigit( byte MOD 16 ) );
    END "Hex byte";

STRING PROCEDURE  ReadyByte( REFERENCE STRING line );
    BEGIN "Get the immediate hex byte"
    SkipJunk( line );
    RETURN( LOP( line ) & LOP( line ) );
    END "Get the immediate hex byte";

STRING PROCEDURE  ReadyWord( REFERENCE STRING line );
    BEGIN "Get 2 bytes"
    STRING  temp;
    temp ← ReadyByte( line );
    RETURN( ReadyByte( line ) & temp );
    END "Get 2 bytes";

external procedure BAIL;
STRING  line, BC, DE, HL, A, mem;
INTEGER  depth, flags;

SetReader( OpenRead("dump") );
SetPrint( "look", "F" );

WHILE  not EOF  DO
    BEGIN "main loop"
    do SkipJunk( line ← ReadLine ) until line or EOF;
    if not line then continue;
    depth ← 89 - Decode( line ) DIV 2;
    mem ← ReadyByte( line );
    BC ← ReadyWord( line );
    DE ← ReadyWord( line );
    HL ← ReadyWord( line );
    flags ← Decode( line );
    A ← ReadyByte( line );
    PRINT( "loc=", ReadyWord( line ), ",mem=", mem, ",BC=", BC,
           ",DE=", DE, ",HL=", HL, ",",
           IF  flags LAND '200  THEN  "S"  ELSE " ",
           IF  flags LAND '100  THEN  "Z"  ELSE " ",
           IF  flags LAND '020  THEN  "A"  ELSE " ",
           IF  flags LAND '004  THEN  "P"  ELSE " ",
           IF  flags LAND '001  THEN  "C"  ELSE " ",
           ",A=", A, ",stack=", ReadyWord( line ), " ", ReadyWord( line ),
           " [", depth, "]" & newline );
    END "main loop";

CloseAll;

END "debug"